package com.lancoo.znbkxx.teacher.base;


import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.RelativeLayout;

import androidx.appcompat.app.AppCompatActivity;

import com.android.tu.loadingdialog.LoadingDialog;
import com.gyf.barlibrary.ImmersionBar;
import com.lancoo.znbkxx.teacher.R;
import com.lancoo.znbkxx.teacher.utils.DensityUtils;
import com.lancoo.znbkxx.teacher.utils.LancooUtils;

import me.jessyan.autosize.internal.CustomAdapt;

public abstract class BaseActivity extends AppCompatActivity implements CustomAdapt {
    public LoadingDialog loadingDialog;
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        loadingDialog = new LoadingDialog.Builder(this).setMessage("加载中...").setCancelable(true)
                .setCancelOutside(true).create();
        setContentView(setLayout());
        initView();
        fullScreen(this);
        if (isNeedToolBar()) {
            RelativeLayout mRlTopBar = findViewById(R.id.rl_topbar);
            setBarPadding(mRlTopBar);
        }
        ImmersionBar.with(this)
                .keyboardEnable(true)  //解决软键盘与底部输入框冲突问题
//                .navigationBarColor(R.color.vifrification)
                .init();

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
                WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);//不息屏

        SharedPreferencesHelper.init(this, "LancooListenClass");
        boolean isHealtheye = SharedPreferencesHelper.getBoolean("teahealtheye", false);
        if (isHealtheye) {
            openAleterWindow();
        } else {
            closeHealthEye();
        }

    }

    public boolean isNeedToolBar(){
        return true;
    }

    // 设置布局
    protected abstract int setLayout();

    // 初始化组件
    protected abstract void initView();


    //页面跳转
    public void startActivity(Class<?> clz) {
        startActivity(new Intent(this, clz));
    }

    public AppCompatActivity getHolderActivity() {
        return this;
    }

    /********************************************************************************************/
    /********************************************************************************************/
    /**************************手机平板适配*****000000000****************************************/
    /********************************************************************************************/
    /********************************************************************************************/

    /**
     * 是否按照宽度进行等比例适配 (为了保证在高宽比不同的屏幕上也能正常适配, 所以只能在宽度和高度之中选择一个作为基准进行适配)
     *
     * @return {@code false} 为按照高度进行适配
     */
    @Override
    public boolean isBaseOnWidth() {
        return false;
    }

    /**
     * 这里使用 iPhone 的设计图, iPhone 的设计图尺寸为 750px * 1334px, 高换算成 dp 为 667 (1334px / 2 = 667dp)
     * <p>
     * 返回设计图上的设计尺寸, 单位 dp
     * {@link #getSizeInDp} 须配合 {@link #isBaseOnWidth()} 使用, 规则如下:
     * 如果 {@link #isBaseOnWidth()} 返回 {@code true}, {@link #getSizeInDp} 则应该返回设计图的总宽度
     * 如果 {@link #isBaseOnWidth()} 返回 {@code false}, {@link #getSizeInDp} 则应该返回设计图的总高度
     * 如果您不需要自定义设计图上的设计尺寸, 想继续使用在 AndroidManifest 中填写的设计图尺寸, {@link #getSizeInDp} 则返回 {@code 0}
     *
     * @return 设计图上的设计尺寸, 单位 dp
     */
    @Override
    public float getSizeInDp() {

//        DisplayMetrics metric = new DisplayMetrics();
//        getWindowManager().getDefaultDisplay().getMetrics(metric);
//        int width = metric.widthPixels;     // 屏幕宽度（像素）
//        int height = metric.heightPixels;   // 屏幕高度（像素）
//        float density = metric.density;      // 屏幕密度（0.75 / 1.0 / 1.5）
//        int densityDpi = metric.densityDpi;  // 屏幕密度DPI（120 / 160 / 240）
//        Log.e("getSizeInDp","=====================width========================="+width);
//        Log.e("getSizeInDp","=====================height========================="+height);
//        Log.e("getSizeInDp","=====================density========================="+density);
//        Log.e("getSizeInDp","=====================densityDpi========================="+densityDpi);
        return 667;
    }

    /********************************************************************************************/
    /********************************************************************************************/
    /**************************手机平板适配*******0000000000**************************************/
    /********************************************************************************************/
    /********************************************************************************************/

    /********************************************************************************************/
    /********************************************************************************************/
    /**************************刘海屏适配******1111111111***************************************/
    /********************************************************************************************/
    /********************************************************************************************/

    /*
     * @param activity
     */
    public static void fullScreen(AppCompatActivity activity) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                //5.x开始需要把颜色设置透明，否则导航栏会呈现系统默认的浅灰色
                Window window = activity.getWindow();
                View decorView = window.getDecorView();
                //两个 flag 要结合使用，表示让应用的主体内容占用系统状态栏的空间
                int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
                decorView.setSystemUiVisibility(option);
                window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
                window.setStatusBarColor(Color.TRANSPARENT);
            } else {
                Window window = activity.getWindow();
                WindowManager.LayoutParams attributes = window.getAttributes();
                int flagTranslucentStatus = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
                int flagTranslucentNavigation = WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION;
                attributes.flags |= flagTranslucentStatus;
                window.setAttributes(attributes);
            }
        }
    }

    /*
     * @param headView 需要设置的view，我这里用到的是布局文件中的include_title
     */
    public void setBarPadding(View view) {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
            view.setPadding(view.getPaddingLeft(),
                    DensityUtils.dp2px(this, 10),
                    view.getPaddingRight(),
                    view.getPaddingBottom());
        } else {
            if (LancooUtils.isTablet(this)) {
                Log.e("==StatusBarHeight===", "" + getStatusBarHeight());
//                headView.setPadding(headView.getPaddingLeft(),
//                        getStatusBarHeight() + DensityUtils.dip2px(0, this),
//                        headView.getPaddingRight(),
//                        headView.getPaddingBottom() + DensityUtils.dip2px(6, this));
                view.setPadding(0,
                        getStatusBarHeight() + DensityUtils.dp2px(this, 0),
                        0,
                        view.getPaddingBottom() + DensityUtils.dp2px(this, 6));
            } else {
//                headView.setPadding(headView.getPaddingLeft(),
//                        getStatusBarHeight() + DensityUtils.dip2px(14, this),
//                        headView.getPaddingRight(),
//                        headView.getPaddingBottom() + DensityUtils.dip2px(6, this));
                view.setPadding(0,
                        getStatusBarHeight() + DensityUtils.dp2px(this, 14),
                        0,
                        view.getPaddingBottom() + DensityUtils.dp2px(this, 6));
            }
        }
    }

    private int getStatusBarHeight() {
        Resources resources = this.getResources();
        int resourceId = resources.getIdentifier("status_bar_height", "dimen", "android");
        int height = resources.getDimensionPixelSize(resourceId);
        Log.v("dbw123", "00000:" + DensityUtils.getScreenHeight(this));
        Log.v("dbw123", "Status height1:" + resources.getDimensionPixelSize(resourceId));
        return height;
    }

    /********************************************************************************************/
    /********************************************************************************************/
    /**************************刘海屏适配*******111111111111**************************************/
    /********************************************************************************************/
    /********************************************************************************************/


    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        if (ev.getAction() == MotionEvent.ACTION_DOWN) {

            // 获得当前得到焦点的View，一般情况下就是EditText（特殊情况就是轨迹求或者实体案件会移动焦点）
            View v = getCurrentFocus();

            if (isShouldHideInput(v, ev)) {
                hideSoftInput(v.getWindowToken());
            }
        }
        return super.dispatchTouchEvent(ev);
    }

    /**
     * 根据EditText所在坐标和用户点击的坐标相对比，来判断是否隐藏键盘，因为当用户点击EditText时没必要隐藏
     *
     * @param v
     * @param event
     * @return
     */
    private boolean isShouldHideInput(View v, MotionEvent event) {
        if (v != null && (v instanceof EditText)) {
            int[] l = {0, 0};
            v.getLocationInWindow(l);
            int left = l[0], top = l[1], bottom = top + v.getHeight(), right = left
                    + v.getWidth();
            if (event.getX() > left && event.getX() < right
                    && event.getY() > top && event.getY() < bottom) {
                // 点击EditText的事件，忽略它。
                return false;
            } else {
                return true;
            }
        }
        // 如果焦点不是EditText则忽略，这个发生在视图刚绘制完，第一个焦点不在EditView上，和用户用轨迹球选择其他的焦点
        return false;
    }

    /**
     * 多种隐藏软件盘方法的其中一种
     *
     * @param token
     */
    private void hideSoftInput(IBinder token) {
        if (token != null) {
            InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            im.hideSoftInputFromWindow(token,
                    InputMethodManager.HIDE_NOT_ALWAYS);
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        ImmersionBar.hideStatusBar(getWindow());  //不调用该方法，如果界面bar发生改变，在不关闭app的情况下，退出此界面再进入将记忆最后一次bar改变的状态
    }

    private FrameLayout frameLayout;

    public void openAleterWindow() {   //打开 dailog 窗口 对 dailog 初始化

        ViewGroup decorView = (ViewGroup) this.getWindow().getDecorView();
        frameLayout = new FrameLayout(getApplicationContext());
        ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        decorView.addView(frameLayout, params);
        getData();
    }

    public void closeHealthEye() {
        ViewGroup decorView = (ViewGroup) this.getWindow().getDecorView();
        decorView.removeView(frameLayout);
    }


    public void getData() {  //获取 存储 sharePrefrence 保存的三原色值
        int realFilter = 20;
        int a = (int) (realFilter / 80f * 180);
        int r = (int) (200 - (realFilter / 80f) * 190);
        int g = (int) (180 - (realFilter / 80f) * 170);
        int b = (int) (60 - realFilter / 80f * 60);
        frameLayout.setBackgroundColor(Color.argb(a, r, g, b));
    }

}
